package com.losrebellos.display.perpsective
{
	import com.losrebellos.display.base.SpritePlus;
	import flash.display.BitmapData;
	import flash.events.Event;
	import flash.geom.Point;


	/**
	 * @author Los Rebellos (Benoit Vinay)
	 */
	public class PerspectiveSprite extends SpritePlus implements IPerspective
	{
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// VARIABLES
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		protected var _calculator:PerspectiveCalculator;
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONSTRUCTOR
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		public function PerspectiveSprite(source:BitmapData, p1:Point = null, p2:Point = null, p3:Point = null, p4:Point = null)
		{
			super();
			
			_calculator = new PerspectiveCalculator(this.graphics, source, p1, p2, p3, p4);
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// SOURCE
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		public function set source(value:BitmapData):void
		{
			_calculator.source = value;
		}
		public function get source():BitmapData
		{
			return _calculator.source;
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// UPDATE
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		public function update(p1:Point, p2:Point, p3:Point, p4:Point):Point
		{
			return _calculator.update(p1, p2, p3, p4);
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// INTERSECTION
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		public function get centralPoint():Point
		{
			return _calculator.centralPoint;
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// DISPOSE
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		override public function dispose(e:Event = null):void
		{
			super.dispose(e);
			
			_calculator.dispose(e);
		}
	}
}